package me.android.library.utils.android;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

import java.util.Set;

import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@UtilityClass
public class PreferenceUtil {
    public boolean getBool(String key, boolean defValue) {
        return getDefaultPrefs().getBoolean(key, defValue);
    }

    public float getFloat(String key, float defValue) {
        return getDefaultPrefs().getFloat(key, defValue);
    }

    public int getInt(String key, int defValue) {
        return getDefaultPrefs().getInt(key, defValue);
    }

    public long getLong(String key, long defValue) {
        return getDefaultPrefs().getLong(key, defValue);
    }

    public String getString(String key, String defValue) {
        return getDefaultPrefs().getString(key, defValue);
    }

    public Set<String> getStrings(String key, Set<String> defValue) {
        return getDefaultPrefs().getStringSet(key, defValue);
    }

    public void setBool(String key, boolean value) {
        Editor edit = getDefaultPrefs().edit();
        edit.putBoolean(key, value);
        edit.apply();
    }

    public void setFloat(String key, float value) {
        Editor edit = getDefaultPrefs().edit();
        edit.putFloat(key, value);
        edit.apply();
    }

    public void setInt(String key, int value) {
        Editor edit = getDefaultPrefs().edit();
        edit.putInt(key, value);
        edit.apply();
    }

    public void setLong(String key, long value) {
        Editor edit = getDefaultPrefs().edit();
        edit.putLong(key, value);
        edit.apply();
    }

    public void setString(String key, String value) {
        Editor edit = getDefaultPrefs().edit();
        edit.putString(key, value);
        edit.apply();
    }

    public void setStrings(String key, Set<String> value) {
        Editor edit = getDefaultPrefs().edit();
        edit.putStringSet(key, value);
        edit.apply();
    }

    public void remove(String key) {
        Editor edit = getDefaultPrefs().edit();
        edit.remove(key);
        edit.apply();
    }

    public void clear() {
        Editor edit = getDefaultPrefs().edit();
        edit.clear();
        edit.apply();
    }


    /**
     * 获取应用默认的 SharedPreferences 实例（使用 Application Context）
     */
    public SharedPreferences getDefaultPrefs() {
        // 使用 Application Context 避免内存泄漏
        Context cx = ContextUtil.getAppContext();
        return getSharedPreferences(cx.getPackageName(), Context.MODE_PRIVATE);
    }

    public SharedPreferences getSharedPreferences(String name, int mode) {
        return ContextUtil.getAppContext().getSharedPreferences(
                name,  // 自定义文件名（推荐使用包名+标识，如 "com.example.app.main_preferences"）
                Context.MODE_PRIVATE   // 存储模式（仅当前应用可访问）
        );
    }
}
